package com.ctshk.sapp.booking.controller;


import com.ctshk.common.annotations.OperationLogAnnotation;
import com.ctshk.common.dto.Result;
import com.ctshk.common.enums.OperationLogModel;
import com.ctshk.common.enums.OperationLogType;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.web.support.BaseController;
import com.ctshk.rpc.booking.dto.SupplierOrderFinanceListDTO;
import com.ctshk.rpc.booking.dto.SupplierOrderFinishPageDTO;
import com.ctshk.rpc.booking.dto.SupplierOrderUnsubBookingPageDTO;
import com.ctshk.rpc.booking.dto.outside.SupplierOrderOutsidePageDTO;
import com.ctshk.rpc.booking.dto.outside.admission.query.SupplierOrderAdmissionDTO;
import com.ctshk.rpc.booking.dto.outside.air.query.SupplierOrderAirDTO;
import com.ctshk.rpc.booking.dto.outside.car.query.SupplierOrderCarDTO;
import com.ctshk.rpc.booking.dto.outside.food.query.SupplierOrderFoodDTO;
import com.ctshk.rpc.booking.dto.outside.hotel.query.SupplierOrderHotelDTO;
import com.ctshk.rpc.booking.dto.outside.other.query.SupplierOrderOtherDTO;
import com.ctshk.rpc.booking.dto.outside.ship.query.SupplierOrderShipDTO;
import com.ctshk.rpc.booking.dto.outside.train.query.SupplierOrderTrainDTO;
import com.ctshk.rpc.booking.dto.system.admission.info.SupplierOrderSystemAdmissionInfoDTO;
import com.ctshk.rpc.booking.dto.system.admission.page.SupplierOrderAdmissionPageDTO;
import com.ctshk.rpc.booking.dto.system.air.info.SupplierOrderSystemAirInfoDTO;
import com.ctshk.rpc.booking.dto.system.air.page.SupplierOrderAirPageDTO;
import com.ctshk.rpc.booking.dto.system.airexpress.info.SupplierOrderSystemAirExpressInfoDTO;
import com.ctshk.rpc.booking.dto.system.airexpress.page.SupplierOrderAirExpressPageDTO;
import com.ctshk.rpc.booking.dto.system.bus.info.SupplierOrderSystemBusInfoDTO;
import com.ctshk.rpc.booking.dto.system.bus.page.SupplierOrderBusPageDTO;
import com.ctshk.rpc.booking.dto.system.commodity.info.SupplierOrderSystemCommodityInfoDTO;
import com.ctshk.rpc.booking.dto.system.commodity.page.SupplierOrderCommodityPageDTO;
import com.ctshk.rpc.booking.dto.system.hotel.info.SupplierOrderSystemHotelInfoDTO;
import com.ctshk.rpc.booking.dto.system.hotel.page.SupplierOrderHotelPageDTO;
import com.ctshk.rpc.booking.dto.system.insurance.info.SupplierOrderSystemInsuranceInfoDTO;
import com.ctshk.rpc.booking.dto.system.insurance.page.SupplierOrderInsurancePageDTO;
import com.ctshk.rpc.booking.dto.system.localfun.info.SupplierOrderSystemLocalFunInfoDTO;
import com.ctshk.rpc.booking.dto.system.localfun.page.SupplierOrderLocalFunPageDTO;
import com.ctshk.rpc.booking.dto.system.ship.info.SupplierOrderSystemShipInfoDTO;
import com.ctshk.rpc.booking.dto.system.ship.page.SupplierOrderShipPageDTO;
import com.ctshk.rpc.booking.dto.system.stampduty.info.SupplierOrderSystemStampDutyInfoDTO;
import com.ctshk.rpc.booking.dto.system.stampduty.page.SupplierOrderStampDutyPageDTO;
import com.ctshk.rpc.booking.dto.system.train.info.SupplierOrderSystemTrainInfoDTO;
import com.ctshk.rpc.booking.dto.system.train.page.SupplierOrderTrainPageDTO;
import com.ctshk.rpc.booking.dto.system.visa.info.SupplierOrderSystemVisaInfoDTO;
import com.ctshk.rpc.booking.dto.system.visa.page.SupplierOrderVisaPageDTO;
import com.ctshk.rpc.booking.req.SupplierOrderFinancePageReq;
import com.ctshk.rpc.booking.req.SupplierOrderFinishPageReq;
import com.ctshk.rpc.booking.req.SupplierOrderUnsubBookingPageReq;
import com.ctshk.rpc.booking.req.outside.SupplierOrderOutsidePageReq;
import com.ctshk.rpc.booking.req.outside.admission.save.SupplierOrderOutsideAdmissionSaveReq;
import com.ctshk.rpc.booking.req.outside.air.save.SupplierOrderOutsideAirSaveReq;
import com.ctshk.rpc.booking.req.outside.approval.SupplierOrderOutsideApprovalReq;
import com.ctshk.rpc.booking.req.outside.car.save.SupplierOrderOutsideCarSaveReq;
import com.ctshk.rpc.booking.req.outside.food.save.SupplierOrderOutsideFoodSaveReq;
import com.ctshk.rpc.booking.req.outside.hotel.save.SupplierOrderOutsideHotelSaveReq;
import com.ctshk.rpc.booking.req.outside.other.save.SupplierOrderOutsideOtherSaveReq;
import com.ctshk.rpc.booking.req.outside.ship.save.SupplierOrderOutsideShipSaveReq;
import com.ctshk.rpc.booking.req.outside.train.save.SupplierOrderOutsideTrainSaveReq;
import com.ctshk.rpc.booking.req.system.SupplierOrderSystemConfirmReq;
import com.ctshk.rpc.booking.req.system.admission.add.SupplierOrderSystemAdmissionAddReq;
import com.ctshk.rpc.booking.req.system.admission.edit.SupplierOrderSystemAdmissionEditReq;
import com.ctshk.rpc.booking.req.system.admission.page.SupplierOrderSystemAdmissionPageReq;
import com.ctshk.rpc.booking.req.system.air.add.SupplierOrderSystemAirAddReq;
import com.ctshk.rpc.booking.req.system.air.edit.SupplierOrderSystemAirEditReq;
import com.ctshk.rpc.booking.req.system.air.page.SupplierOrderSystemAirPageReq;
import com.ctshk.rpc.booking.req.system.airexpress.add.SupplierOrderSystemAirExpressAddReq;
import com.ctshk.rpc.booking.req.system.airexpress.page.SupplierOrderSystemAirExpressPageReq;
import com.ctshk.rpc.booking.req.system.bus.add.SupplierOrderSystemBusAddReq;
import com.ctshk.rpc.booking.req.system.bus.edit.SupplierOrderSystemBusEditReq;
import com.ctshk.rpc.booking.req.system.bus.page.SupplierOrderSystemBusPageReq;
import com.ctshk.rpc.booking.req.system.commodity.add.SupplierOrderSystemCommodityAddReq;
import com.ctshk.rpc.booking.req.system.commodity.edit.SupplierOrderSystemCommodityEditReq;
import com.ctshk.rpc.booking.req.system.commodity.page.SupplierOrderSystemCommodityPageReq;
import com.ctshk.rpc.booking.req.system.hotel.add.SupplierOrderSystemHotelAddReq;
import com.ctshk.rpc.booking.req.system.hotel.edit.SupplierOrderSystemHotelEditReq;
import com.ctshk.rpc.booking.req.system.hotel.page.SupplierOrderSystemHotelPageReq;
import com.ctshk.rpc.booking.req.system.insurance.add.SupplierOrderSystemInsuranceAddReq;
import com.ctshk.rpc.booking.req.system.insurance.page.SupplierOrderSystemInsurancePageReq;
import com.ctshk.rpc.booking.req.system.localfun.add.SupplierOrderSystemLocalFunAddReq;
import com.ctshk.rpc.booking.req.system.localfun.edit.SupplierOrderSystemLocalFunEditReq;
import com.ctshk.rpc.booking.req.system.localfun.page.SupplierOrderSystemLocalFunPageReq;
import com.ctshk.rpc.booking.req.system.ship.add.SupplierOrderSystemShipAddReq;
import com.ctshk.rpc.booking.req.system.ship.edit.SupplierOrderSystemShipEditReq;
import com.ctshk.rpc.booking.req.system.ship.page.SupplierOrderSystemShipPageReq;
import com.ctshk.rpc.booking.req.system.stampduty.add.SupplierOrderSystemStampDutyAddReq;
import com.ctshk.rpc.booking.req.system.stampduty.page.SupplierOrderSystemStampDutyPageReq;
import com.ctshk.rpc.booking.req.system.train.add.SupplierOrderSystemTrainAddReq;
import com.ctshk.rpc.booking.req.system.train.edit.SupplierOrderSystemTrainEditReq;
import com.ctshk.rpc.booking.req.system.train.page.SupplierOrderSystemTrainPageReq;
import com.ctshk.rpc.booking.req.system.visa.add.SupplierOrderSystemVisaAddReq;
import com.ctshk.rpc.booking.req.system.visa.edit.SupplierOrderSystemVisaEditReq;
import com.ctshk.rpc.booking.req.system.visa.page.SupplierOrderSystemVisaPageReq;
import com.ctshk.rpc.booking.service.ISupplierOrderService;
import com.ctshk.rpc.booking.service.ISupplierSystemOrderAdmissionTicketService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * <p>
 * 统一供应商预订单 前端控制器
 * </p>
 *
 * @author 谢诗宏
 * @since 2021-03-09
 */
@Api(value = "供应商预订-团队预订-预订管理", tags = "供应商预订-团队预订-预订管理")
@RestController
@RequestMapping("/supplier/order")
public class SupplierOrderController extends BaseController {
    @DubboReference
    ISupplierOrderService supplierOrderService;
    @DubboReference
    ISupplierSystemOrderAdmissionTicketService supplierSystemOrderAdmissionTicketService;


    @ApiOperation(value = "供应商预订-供应商已完成列表(财务-供应商对账查询)", notes = "供应商预订-供应商已完成列表(财务-供应商对账查询)")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-供应商已完成列表(财务-供应商对账查询)", operDesc = "供应商预订-供应商已完成列表(财务-供应商对账查询)")
    @PostMapping("/page")
    public Result<PageResponse<SupplierOrderFinishPageDTO>> getFinishPage(@RequestBody SupplierOrderFinishPageReq supplierUnsubscribePageReq) {
        PageResponse<SupplierOrderFinishPageDTO> supplierOrderFinishPage = supplierOrderService.getFinishPage(supplierUnsubscribePageReq);
        return Result.success(supplierOrderFinishPage);
    }

    @ApiOperation(value = "供应商预订-供应商全部列表(财务-供应商对账查询)", notes = "供应商预订-供应商全部列表(财务-供应商对账查询)")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-供应商全部列表(财务-供应商对账查询)", operDesc = "供应商预订-供应商全部列表(财务-供应商对账查询)")
    @PostMapping("/page/finance/contacts")
    public Result<PageResponse<SupplierOrderFinishPageDTO>> getFinanceContactsPage(@RequestBody SupplierOrderFinancePageReq supplierOrderAllFinancePageReq) {
        PageResponse<SupplierOrderFinishPageDTO> supplierOrderFinishPage = supplierOrderService.getFinanceContactsPage(supplierOrderAllFinancePageReq);
        return Result.success(supplierOrderFinishPage);
    }

    @ApiOperation(value = "供应商预订-供应商退订查询供应商列表", notes = "供应商预订-供应商退订查询供应商列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-供应商退订查询供应商列表", operDesc = "供应商预订-供应商退订查询供应商列表")
    @PostMapping("/unsub/booking/page")
    public Result<PageResponse<SupplierOrderUnsubBookingPageDTO>> getUnsubBookingPage(@RequestBody SupplierOrderUnsubBookingPageReq supplierOrderUnsubBookingPageReq) {
        PageResponse<SupplierOrderUnsubBookingPageDTO> supplierOrderUnsubBookingPage = supplierOrderService.getUnsubBookingPage(supplierOrderUnsubBookingPageReq);
        return Result.success(supplierOrderUnsubBookingPage);
    }

    @ApiOperation(value = "供应商预订-根据团期ID查询供应商预订和财务信息列表(团模块专用)", notes = "供应商预订-根据团期ID查询供应商预订和财务信息列表(团模块专用)")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "根据团期ID查询供应商预订和财务信息列表(团模块专用)", operDesc = "根据团期ID查询供应商预订和财务信息列表(团模块专用)")
    @PostMapping("/finance/list/{scheduleId}")
    public Result<List<SupplierOrderFinanceListDTO>> queryFinanceListByScheduleId(@PathVariable("scheduleId") Long scheduleId) {
        return supplierOrderService.queryFinanceListByScheduleId(scheduleId, getCurrentUserId());
    }

    @ApiOperation(value = "供应商预订-自由行预订-确认订单", notes = "供应商预订-自由行预订-确认订单")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-确认订单", operDesc = "供应商预订-自由行预订-确认订单")
    @PostMapping("/system/confirm")
    public Result systemConfirm(@RequestBody @Valid SupplierOrderSystemConfirmReq supplierOrderSystemConfirmReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.systemConfirm(supplierOrderSystemConfirmReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-提交审批", notes = "供应商预订-团队预订-提交审批")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-提交审批", operDesc = "供应商预订-团队预订-提交审批")
    @PostMapping("/submit/outside/approval/{id}")
    public Result submitOutsideApproval(@PathVariable("id") long id) {
        return supplierOrderService.submitOutsideApproval(id, getCurrentUser(getRequest()).getId());
    }

    @ApiOperation(value = "供应商预订-团队预订-审批", notes = "供应商预订-团队预订-审批")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-团队预订-审批", operDesc = "供应商预订-团队预订-审批")
    @PostMapping("/outside/approval")
    public Result approvalOutside(@RequestBody @Valid SupplierOrderOutsideApprovalReq supplierOrderOutsideAirSaveReq) {
        supplierOrderOutsideAirSaveReq.setUserId(getCurrentUser(getRequest()).getId());
        return supplierOrderService.approvalOutside(supplierOrderOutsideAirSaveReq);
    }

    @ApiOperation(value = "供应商预订-团队预订-列表", notes = "供应商预订-团队预订-列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-机票列表", operDesc = "供应商预订-团队预订-机票列表")
    @PostMapping("/outside/list")
    public Result<PageResponse<SupplierOrderOutsidePageDTO>> getOutsideList(@RequestBody SupplierOrderOutsidePageReq supplierOrderOutsidePageReq) {
        PageResponse<SupplierOrderOutsidePageDTO> supplierOrderDTOPage = supplierOrderService.selectOutsideList(supplierOrderOutsidePageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-团队预订-机票保存", notes = "供应商预订-团队预订-机票保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-机票保存", operDesc = "供应商预订-团队预订-机票保存")
    @PostMapping("/outside/air/save")
    public Result saveOutsideAir(@RequestBody @Valid SupplierOrderOutsideAirSaveReq supplierOrderOutsideAirSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideAir(supplierOrderOutsideAirSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-机票信息", notes = "供应商预订-团队预订-机票信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-机票信息", operDesc = "供应商预订-团队预订-机票信息")
    @GetMapping("/outside/air/info/{id}")
    public Result<SupplierOrderAirDTO> getOutsideAirInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderAirDTO supplierOrderAirDTO = supplierOrderService.selectOutsideAirById(id, userId);
        return Result.success(supplierOrderAirDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-火车票保存", notes = "供应商预订-团队预订-火车票保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-火车票保存", operDesc = "供应商预订-团队预订-火车票保存")
    @PostMapping("/outside/train/save")
    public Result saveOutsideTrain(@RequestBody @Valid SupplierOrderOutsideTrainSaveReq supplierOrderOutsideTrainSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideTrain(supplierOrderOutsideTrainSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-火车票信息", notes = "供应商预订-团队预订-火车票信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-火车票信息", operDesc = "供应商预订-团队预订-火车票信息")
    @GetMapping("/outside/train/info/{id}")
    public Result<SupplierOrderTrainDTO> getOutsideTrainInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderTrainDTO supplierOrderTrainDTO = supplierOrderService.selectOutsideTrainById(id, userId);
        return Result.success(supplierOrderTrainDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-船票保存", notes = "供应商预订-团队预订-船票保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-船票保存", operDesc = "供应商预订-团队预订-船票保存")
    @PostMapping("/outside/ship/save")
    public Result saveOutsideShip(@RequestBody @Valid SupplierOrderOutsideShipSaveReq supplierOrderOutsideShipSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideShip(supplierOrderOutsideShipSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-船票信息", notes = "供应商预订-团队预订-船票信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-船票信息", operDesc = "供应商预订-团队预订-船票信息")
    @GetMapping("/outside/ship/info/{id}")
    public Result<SupplierOrderShipDTO> getOutsideShipInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderShipDTO supplierOrderShipDTO = supplierOrderService.selectOutsideShipById(id, userId);
        return Result.success(supplierOrderShipDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-餐饮保存", notes = "供应商预订-团队预订-餐饮保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-餐饮保存", operDesc = "供应商预订-团队预订-餐饮保存")
    @PostMapping("/outside/food/save")
    public Result saveOutsideFood(@RequestBody @Valid SupplierOrderOutsideFoodSaveReq supplierOrderOutsideFoodSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideFood(supplierOrderOutsideFoodSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-查询餐饮信息", notes = "供应商预订-团队预订-餐饮信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-餐饮信息", operDesc = "供应商预订-团队预订-餐饮信息")
    @GetMapping("/outside/food/info/{id}")
    public Result<SupplierOrderFoodDTO> getOutsideFoodInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderFoodDTO supplierOrderFoodDTO = supplierOrderService.selectOutsideFoodById(id, userId);
        return Result.success(supplierOrderFoodDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-出租车保存", notes = "供应商预订-团队预订-出租车保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-出租车保存", operDesc = "供应商预订-团队预订-出租车保存")
    @PostMapping("/outside/car/save")
    public Result<Long> saveOutsideCar(@RequestBody @Valid SupplierOrderOutsideCarSaveReq supplierOrderOutsideCarSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideCar(supplierOrderOutsideCarSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-查询出租车信息", notes = "供应商预订-团队预订-出租车信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-出租车信息", operDesc = "供应商预订-团队预订-出租车信息")
    @GetMapping("/outside/car/info/{id}")
    public Result<SupplierOrderCarDTO> getOutsideCarInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderCarDTO supplierOrderCarDTO = supplierOrderService.selectOutsideCarById(id, userId);
        return Result.success(supplierOrderCarDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-酒店保存", notes = "供应商预订-团队预订-酒店保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-酒店保存", operDesc = "供应商预订-团队预订-酒店保存")
    @PostMapping("/outside/hotel/save")
    public Result<Long> saveOutsideHotel(@RequestBody @Valid SupplierOrderOutsideHotelSaveReq supplierOrderOutsideHotelSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideHotel(supplierOrderOutsideHotelSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-查询酒店信息", notes = "供应商预订-团队预订-酒店信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-酒店信息", operDesc = "供应商预订-团队预订-酒店信息")
    @GetMapping("/outside/hotel/info/{id}")
    public Result<SupplierOrderHotelDTO> getOutsideHotelInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderHotelDTO supplierOrderHotelDTO = supplierOrderService.selectOutsideHotelById(id, userId);
        return Result.success(supplierOrderHotelDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-综费保存", notes = "供应商预订-团队预订-综费保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-综费保存", operDesc = "供应商预订-团队预订-综费保存")
    @PostMapping("/outside/other/save")
    public Result<Long> saveOutsideOther(@RequestBody @Valid SupplierOrderOutsideOtherSaveReq supplierOrderOutsideOtherSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideOther(supplierOrderOutsideOtherSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-查询综费信息", notes = "供应商预订-团队预订-查询综费信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-综费信息", operDesc = "供应商预订-团队预订-综费信息")
    @GetMapping("/outside/other/info/{id}")
    public Result<SupplierOrderOtherDTO> getOutsideOtherInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderOtherDTO supplierOrderOtherDTO = supplierOrderService.selectOutsideOtherById(id, userId);
        return Result.success(supplierOrderOtherDTO);
    }

    @ApiOperation(value = "供应商预订-团队预订-门票保存", notes = "供应商预订-团队预订-门票保存")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-团队预订-门票保存", operDesc = "供应商预订-团队预订-门票保存")
    @PostMapping("/outside/admission/save")
    public Result<Long> saveOutsideAdmission(@RequestBody @Valid SupplierOrderOutsideAdmissionSaveReq supplierOrderOutsideAdmissionSaveReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.saveOutsideAdmission(supplierOrderOutsideAdmissionSaveReq, userId);
    }

    @ApiOperation(value = "供应商预订-团队预订-查询门票信息", notes = "供应商预订-团队预订-查询门票信息")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-团队预订-门票信息", operDesc = "供应商预订-团队预订-门票信息")
    @GetMapping("/outside/admission/info/{id}")
    public Result<SupplierOrderAdmissionDTO> getOutsideAdmissionInfo(@PathVariable("id") Long id) {
        Long userId = getCurrentUser(getRequest()).getId();
        SupplierOrderAdmissionDTO supplierOrderAdmissionDTO = supplierOrderService.selectOutsideAdmissionById(id, userId);
        return Result.success(supplierOrderAdmissionDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-酒店列表", notes = "供应商预订-自由行预订-酒店列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-酒店列表", operDesc = "供应商预订-自由行预订-酒店列表")
    @PostMapping("/system/hotel/list")
    public Result<PageResponse<SupplierOrderHotelPageDTO>> getSystemHotelList(@RequestBody SupplierOrderSystemHotelPageReq supplierOrderSystemHotelPageReq) {
        PageResponse<SupplierOrderHotelPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemHotelList(supplierOrderSystemHotelPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-酒店新增", notes = "供应商预订-自由行预订-酒店新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-酒店新增", operDesc = "供应商预订-自由行预订-酒店新增")
    @PostMapping("/system/hotel/add")
    public Result<Long> editSystemHotel(@RequestBody @Valid SupplierOrderSystemHotelAddReq supplierOrderSystemHotelAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemHotel(supplierOrderSystemHotelAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-酒店编辑", notes = "供应商预订-自由行预订-酒店编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-酒店编辑", operDesc = "供应商预订-自由行预订-酒店编辑")
    @PostMapping("/system/hotel/edit")
    public Result<Long> editSystemHotel(@RequestBody @Valid SupplierOrderSystemHotelEditReq supplierOrderSystemHotelEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemHotel(supplierOrderSystemHotelEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-酒店信息查询", notes = "供应商预订-自由行预订-酒店信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-酒店信息查询", operDesc = "供应商预订-自由行预订-酒店信息查询")
    @GetMapping("/system/hotel/{id}")
    public Result<SupplierOrderSystemHotelInfoDTO> getSystemHotel(@PathVariable("id") Long id) {
        SupplierOrderSystemHotelInfoDTO supplierOrderSystemHotelInfoDTO = supplierOrderService.getSystemHotel(id);
        return Result.success(supplierOrderSystemHotelInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-火车票列表", notes = "供应商预订-自由行预订-火车票列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-火车票列表", operDesc = "供应商预订-自由行预订-火车票列表")
    @PostMapping("/system/train/list")
    public Result<PageResponse<SupplierOrderTrainPageDTO>> getSystemTrainList(@RequestBody SupplierOrderSystemTrainPageReq supplierOrderSystemTrainPageReq) {
        PageResponse<SupplierOrderTrainPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemTrainList(supplierOrderSystemTrainPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-火车票新增", notes = "供应商预订-自由行预订-火车票新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-火车票新增", operDesc = "供应商预订-自由行预订-火车票新增")
    @PostMapping("/system/train/add")
    public Result<Long> editSystemTrain(@RequestBody @Valid SupplierOrderSystemTrainAddReq supplierOrderSystemTrainAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemTrain(supplierOrderSystemTrainAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-火车票编辑", notes = "供应商预订-自由行预订-火车票编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-火车票编辑", operDesc = "供应商预订-自由行预订-火车票编辑")
    @PostMapping("/system/train/edit")
    public Result<Long> editSystemTrain(@RequestBody @Valid SupplierOrderSystemTrainEditReq supplierOrderSystemTrainEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemTrain(supplierOrderSystemTrainEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-火车票信息查询", notes = "供应商预订-自由行预订-火车票信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-火车票信息查询", operDesc = "供应商预订-自由行预订-火车票信息查询")
    @GetMapping("/system/train/{id}")
    public Result<SupplierOrderSystemTrainInfoDTO> getSystemTrain(@PathVariable("id") Long id) {
        SupplierOrderSystemTrainInfoDTO supplierOrderSystemTrainInfoDTO = supplierOrderService.getSystemTrain(id);
        return Result.success(supplierOrderSystemTrainInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-巴士票列表", notes = "供应商预订-自由行预订-巴士票列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-巴士票列表", operDesc = "供应商预订-自由行预订-巴士票列表")
    @PostMapping("/system/bus/list")
    public Result<PageResponse<SupplierOrderBusPageDTO>> getSystemBusList(@RequestBody SupplierOrderSystemBusPageReq supplierOrderSystemBusPageReq) {
        PageResponse<SupplierOrderBusPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemBusList(supplierOrderSystemBusPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-巴士票新增", notes = "供应商预订-自由行预订-巴士票新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-巴士票新增", operDesc = "供应商预订-自由行预订-巴士票新增")
    @PostMapping("/system/bus/add")
    public Result<Long> editSystemBus(@RequestBody @Valid SupplierOrderSystemBusAddReq supplierOrderSystemBusAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemBus(supplierOrderSystemBusAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-巴士票编辑", notes = "供应商预订-自由行预订-巴士票编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-巴士票编辑", operDesc = "供应商预订-自由行预订-巴士票编辑")
    @PostMapping("/system/bus/edit")
    public Result<Long> editSystemBus(@RequestBody @Valid SupplierOrderSystemBusEditReq supplierOrderSystemBusEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemBus(supplierOrderSystemBusEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-巴士票信息查询", notes = "供应商预订-自由行预订-巴士票信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-巴士票信息查询", operDesc = "供应商预订-自由行预订-巴士票信息查询")
    @GetMapping("/system/bus/{id}")
    public Result<SupplierOrderSystemBusInfoDTO> getSystemBus(@PathVariable("id") Long id) {
        SupplierOrderSystemBusInfoDTO supplierOrderSystemBusInfoDTO = supplierOrderService.getSystemBus(id);
        return Result.success(supplierOrderSystemBusInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机票列表", notes = "供应商预订-自由行预订-机票列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-机票列表", operDesc = "供应商预订-自由行预订-机票列表")
    @PostMapping("/system/air/list")
    public Result<PageResponse<SupplierOrderAirPageDTO>> getSystemAirList(@RequestBody SupplierOrderSystemAirPageReq supplierOrderSystemAirPageReq) {
        PageResponse<SupplierOrderAirPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemAirList(supplierOrderSystemAirPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机票新增", notes = "供应商预订-自由行预订-机票新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-机票新增", operDesc = "供应商预订-自由行预订-机票新增")
    @PostMapping("/system/air/add")
    public Result<Long> editSystemAir(@RequestBody @Valid SupplierOrderSystemAirAddReq supplierOrderSystemAirAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemAir(supplierOrderSystemAirAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机票编辑", notes = "供应商预订-自由行预订-机票编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-机票编辑", operDesc = "供应商预订-自由行预订-机票编辑")
    @PostMapping("/system/air/edit")
    public Result<Long> editSystemAir(@RequestBody @Valid SupplierOrderSystemAirEditReq supplierOrderSystemAirEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemAir(supplierOrderSystemAirEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机票信息查询", notes = "供应商预订-自由行预订-机票信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-机票信息查询", operDesc = "供应商预订-自由行预订-机票信息查询")
    @GetMapping("/system/air/{id}")
    public Result<SupplierOrderSystemAirInfoDTO> getSystemAir(@PathVariable("id") Long id) {
        SupplierOrderSystemAirInfoDTO supplierOrderSystemAirInfoDTO = supplierOrderService.getSystemAir(id);
        return Result.success(supplierOrderSystemAirInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-船票列表", notes = "供应商预订-自由行预订-船票列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-船票列表", operDesc = "供应商预订-自由行预订-船票列表")
    @PostMapping("/system/ship/list")
    public Result<PageResponse<SupplierOrderShipPageDTO>> getSystemShipList(@RequestBody SupplierOrderSystemShipPageReq supplierOrderSystemShipPageReq) {
        PageResponse<SupplierOrderShipPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemShipList(supplierOrderSystemShipPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-船票新增", notes = "供应商预订-自由行预订-船票新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-船票新增", operDesc = "供应商预订-自由行预订-船票新增")
    @PostMapping("/system/ship/add")
    public Result<Long> editSystemShip(@RequestBody @Valid SupplierOrderSystemShipAddReq supplierOrderSystemShipAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemShip(supplierOrderSystemShipAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-船票编辑", notes = "供应商预订-自由行预订-船票编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-船票编辑", operDesc = "供应商预订-自由行预订-船票编辑")
    @PostMapping("/system/ship/edit")
    public Result<Long> editSystemShip(@RequestBody @Valid SupplierOrderSystemShipEditReq supplierOrderSystemShipEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemShip(supplierOrderSystemShipEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-船票信息查询", notes = "供应商预订-自由行预订-船票信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-船票信息查询", operDesc = "供应商预订-自由行预订-船票信息查询")
    @GetMapping("/system/ship/{id}")
    public Result<SupplierOrderSystemShipInfoDTO> getSystemShip(@PathVariable("id") Long id) {
        SupplierOrderSystemShipInfoDTO supplierOrderSystemShipInfoDTO = supplierOrderService.getSystemShip(id);
        return Result.success(supplierOrderSystemShipInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-门票列表", notes = "供应商预订-自由行预订-门票列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-门票列表", operDesc = "供应商预订-自由行预订-门票列表")
    @PostMapping("/system/admission/list")
    public Result<PageResponse<SupplierOrderAdmissionPageDTO>> getSystemAdmissionList(@RequestBody SupplierOrderSystemAdmissionPageReq supplierOrderSystemAdmissionPageReq) {
        PageResponse<SupplierOrderAdmissionPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemAdmissionList(supplierOrderSystemAdmissionPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-门票新增", notes = "供应商预订-自由行预订-门票新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-门票新增", operDesc = "供应商预订-自由行预订-门票新增")
    @PostMapping("/system/admission/add")
    public Result<Long> editSystemAdmission(@RequestBody @Valid SupplierOrderSystemAdmissionAddReq supplierOrderSystemAdmissionAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemAdmission(supplierOrderSystemAdmissionAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-门票编辑", notes = "供应商预订-自由行预订-门票编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-门票编辑", operDesc = "供应商预订-自由行预订-门票编辑")
    @PostMapping("/system/admission/edit")
    public Result<Long> editSystemAdmission(@RequestBody @Valid SupplierOrderSystemAdmissionEditReq supplierOrderSystemAdmissionEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemAdmission(supplierOrderSystemAdmissionEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-门票信息查询", notes = "供应商预订-自由行预订-门票信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-门票信息查询", operDesc = "供应商预订-自由行预订-门票信息查询")
    @GetMapping("/system/admission/{id}")
    public Result<SupplierOrderSystemAdmissionInfoDTO> getSystemAdmission(@PathVariable("id") Long id) {
        SupplierOrderSystemAdmissionInfoDTO supplierOrderSystemAdmissionInfoDTO = supplierOrderService.getSystemAdmission(id);
        return Result.success(supplierOrderSystemAdmissionInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-门票票号信息查询", notes = "供应商预订-自由行预订-门票票号信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-门票票号信息查询", operDesc = "供应商预订-自由行预订-门票票号信息查询")
    @GetMapping("/system/admission/tickets/{orderId}")
    public Result<String> getSystemAdmissionTickets(@PathVariable("orderId") Long orderId) {
        String systemAdmissionTickets = supplierSystemOrderAdmissionTicketService.getSystemAdmissionTickets(orderId);
        return Result.success(systemAdmissionTickets);
    }

    @ApiOperation(value = "供应商预订-自由行预订-保险列表", notes = "供应商预订-自由行预订-保险列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-保险列表", operDesc = "供应商预订-自由行预订-保险列表")
    @PostMapping("/system/insurance/list")
    public Result<PageResponse<SupplierOrderInsurancePageDTO>> getSystemInsuranceList(@RequestBody SupplierOrderSystemInsurancePageReq supplierOrderSystemInsurancePageReq) {
        PageResponse<SupplierOrderInsurancePageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemInsuranceList(supplierOrderSystemInsurancePageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-保险信息查询", notes = "供应商预订-自由行预订-保险信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-保险信息查询", operDesc = "供应商预订-自由行预订-保险信息查询")
    @GetMapping("/system/insurance/{id}")
    public Result<SupplierOrderSystemInsuranceInfoDTO> getSystemInsurance(@PathVariable("id") Long id) {
        SupplierOrderSystemInsuranceInfoDTO supplierOrderSystemInsuranceInfoDTO = supplierOrderService.getSystemInsurance(id);
        return Result.success(supplierOrderSystemInsuranceInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-保险新增", notes = "供应商预订-自由行预订-保险新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-保险新增", operDesc = "供应商预订-自由行预订-保险新增")
    @PostMapping("/system/insurance/add")
    public Result<String> editSystemInsurance(@RequestBody @Valid SupplierOrderSystemInsuranceAddReq supplierOrderSystemInsuranceAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemInsurance(supplierOrderSystemInsuranceAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-印花税列表", notes = "供应商预订-自由行预订-印花税列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-印花税列表", operDesc = "供应商预订-自由行预订-印花税列表")
    @PostMapping("/system/stampduty/list")
    public Result<PageResponse<SupplierOrderStampDutyPageDTO>> getSystemStampDutyList(@RequestBody SupplierOrderSystemStampDutyPageReq supplierOrderSystemStampDutyPageReq) {
        PageResponse<SupplierOrderStampDutyPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemStampDutyList(supplierOrderSystemStampDutyPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-印花税新增", notes = "供应商预订-自由行预订-印花税新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-印花税新增", operDesc = "供应商预订-自由行预订-印花税新增")
    @PostMapping("/system/stampduty/add")
    public Result<String> editSystemStampDuty(@RequestBody @Valid SupplierOrderSystemStampDutyAddReq supplierOrderSystemStampDutyAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemStampDuty(supplierOrderSystemStampDutyAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-印花税信息查询", notes = "供应商预订-自由行预订-印花税信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-印花税信息查询", operDesc = "供应商预订-自由行预订-印花税信息查询")
    @GetMapping("/system/stampduty/{id}")
    public Result<SupplierOrderSystemStampDutyInfoDTO> getSystemStampDuty(@PathVariable("id") Long id) {
        SupplierOrderSystemStampDutyInfoDTO supplierOrderSystemStampDutyInfoDTO = supplierOrderService.getSystemStampDuty(id);
        return Result.success(supplierOrderSystemStampDutyInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机场快线列表", notes = "供应商预订-自由行预订-机场快线列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-机场快线列表", operDesc = "供应商预订-自由行预订-机场快线列表")
    @PostMapping("/system/airexpress/list")
    public Result<PageResponse<SupplierOrderAirExpressPageDTO>> getSystemAirExpressList(@RequestBody SupplierOrderSystemAirExpressPageReq supplierOrderSystemAirExpressPageReq) {
        PageResponse<SupplierOrderAirExpressPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemAirExpressList(supplierOrderSystemAirExpressPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机场快线新增", notes = "供应商预订-自由行预订-机场快线新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-机场快线新增", operDesc = "供应商预订-自由行预订-机场快线新增")
    @PostMapping("/system/airexpress/add")
    public Result<Long> editSystemAirExpress(@RequestBody @Valid SupplierOrderSystemAirExpressAddReq supplierOrderSystemAirExpressAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemAirExpress(supplierOrderSystemAirExpressAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-机场快线信息查询", notes = "供应商预订-自由行预订-机场快线信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-机场快线信息查询", operDesc = "供应商预订-自由行预订-机场快线信息查询")
    @GetMapping("/system/airexpress/{id}")
    public Result<SupplierOrderSystemAirExpressInfoDTO> getSystemAirExpress(@PathVariable("id") Long id) {
        SupplierOrderSystemAirExpressInfoDTO supplierOrderSystemAirExpressInfoDTO = supplierOrderService.getSystemAirExpress(id);
        return Result.success(supplierOrderSystemAirExpressInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-签证列表", notes = "供应商预订-自由行预订-签证列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-签证列表", operDesc = "供应商预订-自由行预订-签证列表")
    @PostMapping("/system/visa/list")
    public Result<PageResponse<SupplierOrderVisaPageDTO>> getSystemVisaList(@RequestBody SupplierOrderSystemVisaPageReq supplierOrderSystemVisaPageReq) {
        PageResponse<SupplierOrderVisaPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemVisaList(supplierOrderSystemVisaPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-签证新增", notes = "供应商预订-自由行预订-签证新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-签证新增", operDesc = "供应商预订-自由行预订-签证新增")
    @PostMapping("/system/visa/add")
    public Result<Long> editSystemVisa(@RequestBody @Valid SupplierOrderSystemVisaAddReq supplierOrderSystemVisaAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemVisa(supplierOrderSystemVisaAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-签证编辑", notes = "供应商预订-自由行预订-签证编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-签证编辑", operDesc = "供应商预订-自由行预订-签证编辑")
    @PostMapping("/system/visa/edit")
    public Result<Long> editSystemVisa(@RequestBody @Valid SupplierOrderSystemVisaEditReq supplierOrderSystemVisaEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemVisa(supplierOrderSystemVisaEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-签证信息查询", notes = "供应商预订-自由行预订-签证信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-签证信息查询", operDesc = "供应商预订-自由行预订-签证信息查询")
    @GetMapping("/system/visa/{id}")
    public Result<SupplierOrderSystemVisaInfoDTO> getSystemVisa(@PathVariable("id") Long id) {
        SupplierOrderSystemVisaInfoDTO supplierOrderSystemVisaInfoDTO = supplierOrderService.getSystemVisa(id);
        return Result.success(supplierOrderSystemVisaInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-当地玩乐列表", notes = "供应商预订-自由行预订-当地玩乐列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-当地玩乐列表", operDesc = "供应商预订-自由行预订-当地玩乐列表")
    @PostMapping("/system/localfun/list")
    public Result<PageResponse<SupplierOrderLocalFunPageDTO>> getSystemLocalFunList(@RequestBody SupplierOrderSystemLocalFunPageReq supplierOrderSystemLocalFunPageReq) {
        PageResponse<SupplierOrderLocalFunPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemLocalFunList(supplierOrderSystemLocalFunPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-当地玩乐新增", notes = "供应商预订-自由行预订-当地玩乐新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-当地玩乐新增", operDesc = "供应商预订-自由行预订-当地玩乐新增")
    @PostMapping("/system/localfun/add")
    public Result<Long> editSystemLocalFun(@RequestBody @Valid SupplierOrderSystemLocalFunAddReq supplierOrderSystemLocalFunAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemLocalFun(supplierOrderSystemLocalFunAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-当地玩乐编辑", notes = "供应商预订-自由行预订-当地玩乐编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-当地玩乐编辑", operDesc = "供应商预订-自由行预订-当地玩乐编辑")
    @PostMapping("/system/localfun/edit")
    public Result<Long> editSystemLocalFun(@RequestBody @Valid SupplierOrderSystemLocalFunEditReq supplierOrderSystemLocalFunEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemLocalFun(supplierOrderSystemLocalFunEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-当地玩乐信息查询", notes = "供应商预订-自由行预订-当地玩乐信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-当地玩乐信息查询", operDesc = "供应商预订-自由行预订-当地玩乐信息查询")
    @GetMapping("/system/localfun/{id}")
    public Result<SupplierOrderSystemLocalFunInfoDTO> getSystemLocalFun(@PathVariable("id") Long id) {
        SupplierOrderSystemLocalFunInfoDTO supplierOrderSystemLocalFunInfoDTO = supplierOrderService.getSystemLocalFun(id);
        return Result.success(supplierOrderSystemLocalFunInfoDTO);
    }

    @ApiOperation(value = "供应商预订-自由行预订-商品列表", notes = "供应商预订-自由行预订-商品列表")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-商品列表", operDesc = "供应商预订-自由行预订-商品列表")
    @PostMapping("/system/commodity/list")
    public Result<PageResponse<SupplierOrderCommodityPageDTO>> getSystemCommodityList(@RequestBody SupplierOrderSystemCommodityPageReq supplierOrderSystemCommodityPageReq) {
        PageResponse<SupplierOrderCommodityPageDTO> supplierOrderDTOPage = supplierOrderService.selectSystemCommodityList(supplierOrderSystemCommodityPageReq);
        return Result.success(supplierOrderDTOPage);
    }

    @ApiOperation(value = "供应商预订-自由行预订-商品新增", notes = "供应商预订-自由行预订-商品新增")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.ADD, operTitle = "供应商预订-自由行预订-商品新增", operDesc = "供应商预订-自由行预订-商品新增")
    @PostMapping("/system/commodity/add")
    public Result<Long> editSystemCommodity(@RequestBody @Valid SupplierOrderSystemCommodityAddReq supplierOrderSystemCommodityAddReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.addSystemCommodity(supplierOrderSystemCommodityAddReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-商品编辑", notes = "供应商预订-自由行预订-商品编辑")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.UPDATE, operTitle = "供应商预订-自由行预订-商品编辑", operDesc = "供应商预订-自由行预订-商品编辑")
    @PostMapping("/system/commodity/edit")
    public Result<Long> editSystemCommodity(@RequestBody @Valid SupplierOrderSystemCommodityEditReq supplierOrderSystemCommodityEditReq) {
        Long userId = getCurrentUser(getRequest()).getId();
        return supplierOrderService.editSystemCommodity(supplierOrderSystemCommodityEditReq, userId);
    }

    @ApiOperation(value = "供应商预订-自由行预订-商品信息查询", notes = "供应商预订-自由行预订-商品信息查询")
    @OperationLogAnnotation(operModul = OperationLogModel.SUPPLIER_BOOKING, operType = OperationLogType.QUERY, operTitle = "供应商预订-自由行预订-商品信息查询", operDesc = "供应商预订-自由行预订-商品信息查询")
    @GetMapping("/system/commodity/{id}")
    public Result<SupplierOrderSystemCommodityInfoDTO> getSystemCommodity(@PathVariable("id") Long id) {
        SupplierOrderSystemCommodityInfoDTO supplierOrderSystemCommodityInfoDTO = supplierOrderService.getSystemCommodity(id);
        return Result.success(supplierOrderSystemCommodityInfoDTO);
    }
}